/*
	*@param	thread:	pthread_join()等待指定线程的终止，通过参数 thread（线程 ID） 指定需要等待的线程；
	*@param	retval:	如果参数 retval 不为 NULL，则 pthread_join()将目标线程的退出状态（即目标线程通过pthread_exit()退出时指定的返回值或者在线程 start 函数中执行 return 语句对应的返回值）
					复制到*retval 所指向的内存区域；如果目标线程被 pthread_cancel()取消， 则将 PTHREAD_CANCELED 放在*retval 中。 如果对目标线程的终止状态不感兴趣，则可将参数 retval 设置为 NULL。
 	*@return		成功返回 0；失败将返回错误码。
 */
//int pthread_join(pthread_t thread, void **retval);

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>


static void *new_thread_start(void *arg)
{
	puts("新线程");

	//睡眠1秒钟，给主线程退出时间
	sleep(2);

	puts("新线程退出");

	//退出新线程
	pthread_exit((void*)10);
}

int main(void)
{
	pthread_t tid;
	void *tret; 
	int ret;

	//申请一个线程
	ret = pthread_create(&tid, NULL, new_thread_start, NULL);
	if (ret)
	{
		fprintf(stderr,"pthread_create error:%s\n",strerror(ret));
		exit(-1);
	}

	//回收一个线程
	ret = pthread_join(tid,&tret);
	if (ret)
	{
		fprintf(stderr,"pthread_join error:%s\n",strerror(ret));

		exit(-1);
	}

	printf("新线程终止, code=%ld\n", (long)tret);

	exit(0);
}